package com.dxg.msns.upload.config;

import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.web.cors.CorsConfiguration;
import org.springframework.web.cors.UrlBasedCorsConfigurationSource;
import org.springframework.web.filter.CorsFilter;

@Configuration
public class MSNSCorsConfig {
    @Bean
    public CorsFilter corsFilter() {
        // 添加cors配置信息
        CorsConfiguration config = new CorsConfiguration();

        // =========================== 生产环境配置（推荐） ===========================
        // 添加允许的域 - 支持开发和生产环境
        config.addAllowedOrigin("http://localhost:8080"); // 前端开发服务器
        config.addAllowedOrigin("http://127.0.0.1:8080"); // 本地IP访问
        config.addAllowedOrigin("http://localhost:3000"); // React默认端口
        config.addAllowedOrigin("http://localhost:4200"); // Angular默认端口
        config.addAllowedOrigin("http://localhost:5173"); // Vite默认端口
        config.addAllowedOrigin("http://localhost:8000"); // 其他常用端口
        config.addAllowedOrigin("http://127.0.0.1:3000");
        config.addAllowedOrigin("http://127.0.0.1:4200");
        config.addAllowedOrigin("http://127.0.0.1:5173");
        config.addAllowedOrigin("http://127.0.0.1:8000");

        // =========================== 开发环境配置（仅开发时使用） ===========================
        // 如果需要支持所有域名（仅开发环境使用，注释掉上面的具体域名配置）
        // config.addAllowedOriginPattern("*");
        // 注意：使用 addAllowedOriginPattern("*") 时，需要注释掉上面的 addAllowedOrigin 配置

        // 允许的请求方式
        config.addAllowedMethod("GET");
        config.addAllowedMethod("POST");
        config.addAllowedMethod("PUT");
        config.addAllowedMethod("DELETE");
        config.addAllowedMethod("PATCH");
        config.addAllowedMethod("OPTIONS");
        config.addAllowedMethod("HEAD");

        // 允许的头信息
        config.addAllowedHeader("*");

        // 是否发送cookie信息
        config.setAllowCredentials(true);

        // 预检请求有效期（秒）
        config.setMaxAge(3600L);

        // 添加映射路径，拦截所有请求
        UrlBasedCorsConfigurationSource configSource = new UrlBasedCorsConfigurationSource();
        configSource.registerCorsConfiguration("/**", config);

        // 返回新的CorsFilter
        return new CorsFilter(configSource);
    }
}
